package com.dd.cloud.user.entity.file;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dd.cloud.common.annotate.FileSuffix;
import com.dd.cloud.common.annotate.validation.Desc;
import com.dd.cloud.common.annotate.validation.Name;
import com.dd.cloud.common.annotate.validation.Url;
import com.dd.cloud.common.constants.RegularConstants;
import com.gitee.sunchenbin.mybatis.actable.annotation.Column;
import com.gitee.sunchenbin.mybatis.actable.annotation.Table;
import com.gitee.sunchenbin.mybatis.actable.constants.MySqlTypeConstant;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 文件表
 * </p>
 *
 * @author czg
 * @since 2022-03-23
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Table(comment = "文件表")
public class FileInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    @Column(isKey = true, isAutoIncrement = true)
    private Integer id;

    /**
     * 文件名,文件服务器的文件名
     */
    @Column(length = RegularConstants.Verify.MAX_DESC, comment = "文件名,文件服务器的文件名")
    @Desc(begin = "文件名")
    private String fileName;

    /**
     * 文件地址 http的访问地址
     */
    @FileSuffix
    @Column(length = RegularConstants.Verify.MAX_URL, comment = "文件地址 http的访问地址")
    @Url(begin = "文件地址")
    private String fileUrl;

    /**
     * 原始文件名,目标文件名
     */
    @Column(length = RegularConstants.Verify.MAX_URL, comment = "原始文件名,目标文件名")
    @Url(begin = "文件名", required = false)
    private String fileOriginalName;

    /**
     * 文件大小
     */
    @Column(comment = "文件大小")
    private Long fileSize;

    /**
     * 文件类型
     */
    @Column(length = RegularConstants.Verify.MAX_DESC, comment = "文件类型")
    private String contentType;

    /**
     * 文件使用类型 1自定义上传使用 2程序使用上传
     */
    @Column(type = MySqlTypeConstant.TINYINT, comment = "文件使用类型 1自定义上传使用 2程序使用上传")
    private Integer useType;

    /**
     * 创建者的id
     */
    @Column( comment = "创建者的id")
    private Integer founderId;

    /**
     * 创建者类型 同登录类型
     */
    @Column(type = MySqlTypeConstant.TINYINT, comment = "创建者类型 同登录类型")
    private Integer founderType;

    /**
     * 创建者名字
     */
    @Column(length = RegularConstants.Verify.MAX_NAME, comment = "创建者名字")
    private String founderName;

    /**
     * 创建时间
     */
    @Column(comment = "创建时间")
    private LocalDateTime createDate;

    /**
     * 最后更新者
     */
    @Column(comment = "最后更新者")
    private Integer lastModifiedId;

    /**
     * 更新者类型 同登录类型
     */
    @Column(type = MySqlTypeConstant.TINYINT, comment = "更新者类型")
    private Integer lastModifiedType;

    /**
     * 更新者名字
     */
    @Column(length = RegularConstants.Verify.MAX_NAME, comment = "更新者名字")
    private String lastModifiedName;

    /**
     * 状态 1可用 0禁用 -1删除
     */
    @Column(type = MySqlTypeConstant.TINYINT, comment = "状态 1可用 0禁用 -1删除")
    private Integer status;

    /**
     * 文件说明
     */
    @Column(length = RegularConstants.Verify.MAX_DESC, comment = "文件说明")
    private String remarks;
}
